# 82. 删除排序链表中的重复元素 II

// 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
// 返回同样按升序排列的结果链表。
var deleteDuplicates = function(head) {
  if (head === null || head.next === null) return head

  const obj = {}
  while (head) {
    if (obj[head.val]) {
      obj[head.val] += 1
    } else {
      obj[head.val] = 1
    }
    head = head.next
  }

  const prevRes = { next: null }
  let res = prevRes
  Object.keys(obj)
    .sort((a, b) => +a - b)
    .forEach((key) => {
      if (obj[key] === 1) {
        res.next = { val: key, next: null }
        res = res.next
      }
    })

  return prevRes.next
}
// console.log(
//   deleteDuplicates({
//     val: 1,
//     next: {
//       val: 2,
//       next: {
//         val: 3,
//         next: {
//           val: 3,
//           next: {
//             val: 4,
//             next: {
//               val: 4,
//               next: {
//                 val: 5,
//               },
//             },
//           },
//         },
//       },
//     },
//   })
// )

// console.log(
//   deleteDuplicates({
//     val: 1,
//     next: {
//       val: 1,
//       next: null,
//     },
//   })
// )

console.log(
  deleteDuplicates({
    val: -3,
    next: {
      val: -1,
      next: {
        val: -1,
        next: {
          val: 0,
          next: {
            val: 0,
            next: {
              val: 0,
              next: {
                val: 0,
                next: {
                  val: 0,
                  next: {
                    val: 2,
                    next: null,
                  },
                },
              },
            },
          },
        },
      },
    },
  })
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Last Updated: 6/27/2023, 7:40:45 PM